#ifndef NETWORK_H
#define NETWORK_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

typedef struct sockaddr* SP;

#define ADDRESS "172.20.10.2"
#define PORT 7777
#define MESSAGE_LEN 4096
#define BUFF_LEN 256
#define MAX_LISTEN 50

#define error(func) fprintf(stderr,"%s:%d,%s:%m,pid:%u\n",__FILE__,__LINE__,func,getpid())

typedef struct NetWork
{
	int fd;			// socket对象描述符
	int type;		// SOCK_DGRAM或SOCK_STREAM
	socklen_t len;	// 地址结构的字节数
	struct sockaddr_in addr;	// 通信地址
}NetWork;

// 创建NetWork对象
NetWork* nopen(int type,const char* ip,in_port_t port,bool issvr);

// 用于接收客户端连接，TCP服务端专用
NetWork* naccept(NetWork* svrnw);

// UDP和TCP通用的数据发送函数
int nsend(NetWork* nw,const void* buf,size_t len);

// UDP和TCP通用的数据接收函数
int nrecv(NetWork* nw,void* buf,size_t len);

// 关闭socket并释放NetWork
void nclose(NetWork* nw);

#endif//NETWORK_H
